package com.itheima.juc23.question5;

import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * @author li
 * 在上一题的基础上继续完成如下需求：
 * 在每次抽的过程中，不打印，抽完时一次性打印（随机）
 * 在此次抽奖过程中，抽奖箱1总共产生了6个奖项。
 * 分别为：10,20,100,500,2,300，最高奖项为300元，总计额为932元
 * 在此次抽奖过程中，抽奖箱2总共产生了6个奖项。
 * 分别为：5,50,200,800,80,700，最高奖项为800元，总计额为1835元
 * 在此次抽奖过程中，抽奖箱2中产生了最大奖项，该奖项金额为800元
 * 核心：获取线程抽奖的最大值（看成是线程运行的结果）
 */
public class Test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list, 10, 50, 2, 60, 100, 200, 500, 800, 2, 80, 300, 700);

        // 1、创建MyCallable对象
        MyCallable callable = new MyCallable(list);
        // 创建Future实现类FutureTask的对象（作用管理多线程运行的结果）
        FutureTask<Integer> futureTask1 = new FutureTask<>(callable);
        FutureTask<Integer> futureTask2 = new FutureTask<>(callable);
        // 创建Thread类对象，并启动（表示线程）
        Thread t1 = new Thread(futureTask1, "抽奖箱1");
        Thread t2 = new Thread(futureTask2, "抽奖箱2");
        t1.start();
        t2.start();
        StringBuilder result = futureTask1.get(10, TimeUnit.SECONDS) > futureTask2.get(10, TimeUnit.SECONDS) ? new StringBuilder("在此次抽奖过程中抽奖箱1产生了最大奖项，该奖项金额为" + futureTask1.get(10, TimeUnit.SECONDS) + "元") : new StringBuilder("在此次抽奖过程中抽奖箱2产生了最大奖项，该奖项金额为" + futureTask2.get(10, TimeUnit.SECONDS) + "元");
        System.out.println(result);
    }
}
